home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
pao
/
towns
/
paolib
/
hc.h
< prev
next >
Wrap
Text File
|
1991-10-18
|
15KB
|
377 lines
/* << 386ASM V2.0 & High C V1.4 >> ********************************************
**
** パオパオのライブラリ用ヘッダ
**
** 1991.04.13 : CREATE
** 1991.05.11 : FINISH
**
** < History >
** 1991.04.13 : CREATE
**
** < note > : TABS = 4
**
** ☆ 注意 ☆
** HC.LIBを使用する時は、リンク時に以下の点に気をつけて下さい.
** (リアルコードとネイティブコードが混在するため. 詳細はDOS-Extenderユーザーズマニュアルを参照)
** 1. 最初にREALHEAD.OBJをリンクすること. (FMC.LIBを使用する時等に必要)
** 2. HC.LIBは最後にリンクするようにすること.
** また,次のスイッチをリンク時に指定して下さい. (リアル関係)
** -realbreak _realend
** -callbufs 2 ← 2~64の範囲内でアプリで必要な値を設定します.
** -maxibuf 62 ← これが最適ですが,メモリの空き状況によっては減らし
** た方がいいでしょう.
** -maxreal 2000h ← この例では,128KBのリアル領域を空けておきます.
** 指定値は,アプリで別のリアルプログラムをEXECする場合に
** 必要な値とします. 通常は,0fffh でいいでしょう.
** ※ リアルコードとネイティブコードが混在する処理をする時には、上記2点を守って下さい.
** まぁ、リンク時にエラーにならなければ大丈夫だとは思いますが・・・
**
** Programmed by Y.Hirata ( Nifty ID : NAB03321 )
******************************************************************************/
#define TRUE 1
#define FALSE 0
#define ERROR 1
#define NOERROR 0
/*-----------------------------------------------------------------------------
** データ型定義
-----------------------------------------------------------------------------*/
typedef unsigned char uchar ;
typedef unsigned short ushort ;
typedef unsigned long ulong ;
typedef unsigned int uint ;
typedef signed char schar ;
typedef signed short sshort ;
typedef signed long slong ;
typedef signed int sint ;
/*-----------------------------------------------------------------------------
** 乱数処理用
** 乱数のマクロを使用する側で、stdio.h, stdlib.h, time.h を include して下さい!
-----------------------------------------------------------------------------*/
#define RANDINIT srand((unsigned int)clock()) /* 乱数初期化 */
#define RANDOM(x) (rand()%(x)) /* 乱数 : 0~x */
/*-----------------------------------------------------------------------------
** マウス処理用
-----------------------------------------------------------------------------*/
#define MOS_LEFT 1 /* マウス左クリック */
#define MOS_RIGHT 2 /* マウス右クリック */
#define MOS_BOTH 3 /* マウス左右クリック */
/*-----------------------------------------------------------------------------
** グラフィック処理用(テキスト処理含む)
-----------------------------------------------------------------------------*/
enum Values_for_ColorNo {
C_BLACK, C_BLUE, C_RED, C_PURPLE, /* 0 - 3 */
C_GREEN, C_LIGHTBLUE, C_YELLOW, C_WHITE, /* 4 - 7 */
C_HBLACK, C_HBLUE, C_HRED, C_HPURPLE, /* 8 - 11 */
C_HGREEN, C_HLIGHTBLUE, C_HYELLOW, C_HWHITE /* 12 - 15 */
} ;
enum Values_for_Write_Mode {
PSET, PRESET, OR, AND, XOR, NOT, MATTE, PASTEL, /* 0 ~ 7 */
/* 8 ~ 15 */
DUMMY_1, OPAQUE, IMPSET, INPNOT, MASKSET, MASKRESET, MASKNOT
} ;
#define XCDOT 8 /* 文字サイズ(x方向) */
#define YCDOT 16 /* 文字サイズ(y方向) */
#define MAXLINE 30 /* 画面枠内最大行数 */
#define MAXVLINE 32 /* 描画領域内最大行数 */
#define MAXCOLM 80 /* 最大文字数( ANK文字 ) */
#define MAXVCOLM 128 /* 描画領域内最大文字数 */
#define CRT_CTRL 0x0FDA0 /* CRTコントロールレジスタ */
#define PALETTE_ADDR 0x0FD90 /* パレットコードレジスタ */
#define PALETTE_B_DATA 0x0FD92 /* 青色パレットデータレジスタ */
#define PALETTE_R_DATA 0x0FD94 /* 赤色パレットデータレジスタ */
#define PALETTE_G_DATA 0x0FD96 /* 緑色パレットデータレジスタ */
/*-----------------------------------------------------------------------------
** 致命的エラー処理用
-----------------------------------------------------------------------------*/
/*
** INT24発生時の詳細情報格納用
*/
#ifndef _DOSERROR_DEFINED
struct _DOSERROR {
short int exterror ; /* 拡張エラーコード */
char class ; /* エラークラス */
char action ; /* エラー対処 */
char locus ; /* エラー発生場所 */
} ;
#define _DOSERROR_DEFINED
#endif
/*
** INT24復帰時の処理
*/
#define INT24_IGNORE 0 /* 無視 */
#define INT24_RETRY 1 /* 再試行 */
#define INT24_ABORT 2 /* プログラム中止 */
#define INT24_FAIL 3 /* ファンクションコール失敗 */
/*-----------------------------------------------------------------------------
** ドライブ種別定義
-----------------------------------------------------------------------------*/
#define DRV_FD 0x00 /* フロッピィディスク */
#define DRV_HD 0x02 /* ハードディスク */
#define DRV_RAM 0x03 /* RAMディスク */
#define DRV_ROM 0x05 /* ROMドライブ */
/*-----------------------------------------------------------------------------
** デバイス種別定義 (LOW 4bit:ユニット番号)
-----------------------------------------------------------------------------*/
#define DEV_FD 0x20 /* フロッピィディスク */
#define DEV_RAM 0x40 /* RAMディスク */
#define DEV_ROM 0x42 /* ROMドライブ */
#define DEV_HD 0xB0 /* ハードディスク */
#define DEV_ERR 0xFF /* ??? */
/*-----------------------------------------------------------------------------
** ファイル関係用
-----------------------------------------------------------------------------*/
#define YEAR(d) ((((d) >> 9) & 0x7f) + 80)
#define MONTH(d) (((d) >> 5) & 0x0f)
#define DATE(d) ((d) & 0x1f)
#define HOUR(d) (((d) >> 11) & 0x1f)
#define MINUTE(d) (((d) >> 5) & 0x3f)
#define SEC(d) (((d) & 0x1f) * 2)
/* ファイル属性 */
#define DIR_RO 0x0001 /* 読出専用(書き込み不可) */
#define DIR_HID 0x0002 /* 隠しファイル(DIRコマンド不可視)*/
#define DIR_SYS 0x0004 /* システムファイル */
#define DIR_VOL 0x0008 /* ボリューム名 */
#define DIR_DIR 0x0010 /* サブディレクトリ */
#define DIR_ARC 0x0020 /* アーカイブビット */
/* ファイル検索情報 */
#ifndef _FIND_T_DEFINED
struct _find_t {
char reserved[21] ; /* MS-DOSが使用 */
char attrib ; /* 属性 */
ushort wr_time ; /* 更新時刻 */
ushort wr_date ; /* 更新日付 */
long size ; /* ファイルサイズ(バイト) */
char name[13] ; /* 検索されたファイル名 */
} ;
#define _FIND_T_DEFINED
#endif
#define ERRSIZE -1 /* ファイルが見つからない時のサイズ */
/* ディスク情報 */
#ifndef _DISKFREE_T_DEFINED
struct _diskfree_t {
unsigned total_clusters ; /* 全クラスタ数 */
unsigned avail_clusters ; /* 使用可能クラスタ数 */
unsigned sectors_per_cluster ; /* セクタ数/クラスタ */
unsigned bytes_per_sector ; /* バイト数/セクタ */
};
#define _DISKFREE_T_DEFINED
#endif
/*-----------------------------------------------------------------------------
** 関数プロトタイプ宣言
-----------------------------------------------------------------------------*/
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < FILE.C >
** ファイル関係
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
unsigned chmod( char *path,unsigned attr ) ;
void getdrive( unsigned *drv ) ;
void setdrive( unsigned drv,unsigned *maxdrv ) ;
int chdir( char *path ) ;
int mkdir( char *path ) ;
int rmdir( char *path ) ;
char *getcwd( char *path,int n ) ;
void setdta( struct _find_t *dta ) ;
unsigned findfirst( char *path,unsigned attr,struct _find_t *dta ) ;
unsigned findnext( struct _find_t *dta ) ;
long filesize( char *path ) ;
unsigned getdiskfree( unsigned drv,struct _diskfree_t *disk ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < REALCALL.ASM >
** High C から REALプロシジャを呼ぶ
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern RealCall() ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < CTRL.ASM >
** CONTROLへのパラメタ転送
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern CTRL_cmdline() ;
extern char CTRL_cmdline_data[] ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < INTR.ASM >
** 割り込みの禁止/解除
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern _disable() ;
extern _enable() ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < INOUTP.ASM >
** ポート入出力
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern unsigned short int inp( unsigned short int port ) ;
extern outp( unsigned short int port,unsigned short int value ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < VSYNC.ASM >
** VSYNC割り込みの登録/解除
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern int (*VSYNC_entry)() ;
extern VSYNC_init() ;
extern VSYNC_end() ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < VKILL.ASM >
** TBIOSのVSYNCチェック処理へのパッチ
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern int VSYNC_KILL_init() ;
extern int VSYNC_KILL_start() ;
extern int VSYNC_KILL_end() ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < SYSINF.ASM >
** システム(SETUP)情報の取得
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern int SYS_getinf( unsigned char *sysbuf ) ;
extern int DRV_single() ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < DRV.C >
** ドライブ情報の取得
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
uchar DRV_status( uchar drvno ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < POFF.ASM >
** POFF / REBOOT
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern poff() ;
extern reboot() ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < SOFTIME.ASM >
** 10us単位でのWAIT
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern SOFT_timer( unsigned short ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < INT24.ASM >
** 致命的エラーの処理用(CTRL+Cマスク設定含む)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern INT24errno ;
extern struct _DOSERROR INT24err ;
extern int (*INT24_entry)( unsigned,unsigned ) ;
extern INT24_init() ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < VRAM.ASM >
** VRAM直接書き込みルーチン
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern int VRAM_color( int fcol,int bcol ) ;
extern int VRAM_page( int page ) ;
extern int VRAM_putstr( int x,int y,char *str ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < GRP.C >
** グラフィックルーチン
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern char *GRPwork ;
extern int GRPpmode ;
extern int GRPwmode ;
extern int GRPfcolor ;
extern int GRPbcolor ;
extern int GRPpcolor ;
extern int GRPmcolor ;
extern int GRPwpage ;
int GRP_init( char *egbwork,int size ) ;
int GRP_paintMode( int mode ) ;
int GRP_writeMode( int mode ) ;
int GRP_color( int n,int color ) ;
int GRP_writePage( int page ) ;
int GRP_viewport( int x1,int y1,int x2,int y2 ) ;
void GRP_textatr( int t_sp,int f_st ) ;
void GRP_locate( int row,int column ) ;
int GRP_putstr( char *str ) ;
int GRP_printf( char *str,... ) ;
int GRP_get( int x1,int y1,int x2,int y2,unsigned int p,int bpp ) ;
int GRP_put( int x1,int y1,int x2,int y2,unsigned int p,int bpp ) ;
int GRP_line( int x1,int y1,int x2,int y2 ) ;
int GRP_box( int x1,int y1,int x2,int y2 ) ;
int GRP_triangle( int x1,int y1,int x2,int y2,int x3,int y3 ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < TEXT.C >
** テキスト表示ルーチン(16色モード:480line用)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
extern int TEXTtabs ;
extern char TEXTcrflg ;
int TEXT_init( char *egbwork,int size ) ;
void TEXT_pos( int *x,int *y ) ;
void TEXT_control( int sw ) ;
void TEXT_color( int col ) ;
void TEXT_backcolor( int col ) ;
void _TEXT_cursor( int x,int y ) ;
void TEXT_cursor( int sw ) ;
void TEXT_locate( int row,int column ) ;
void TEXT_cls( void ) ;
char _TEXT_gets( char *str ) ;
void TEXT_puts( char *str ) ;
void TEXT_scroll( char * ) ;
void TEXT_revscroll( char * ) ;
void _TEXT_cr( int mark ) ;
void TEXT_cr( void ) ;
void TEXT_bs( void ) ;
void TEXT_movecursor( char cursor ) ;
void _TEXT_putc( char c ) ;
void TEXT_putc( char c ) ;
void _TEXT_beep( int time,int count ) ;
void TEXT_beep( void ) ;
void TEXT_linecls( int mode ) ;
void TEXT_escattr( int mode ) ;
void _TEXT_putch( char c ) ;
int TEXT_esc( char c ) ;
void TEXT_putch( char c ) ;
void TEXT_putstr( char *str ) ;
int TEXT_printf( char *str,... ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < CONINIT.C >
** コンソール初期化
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
void coninit() ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < KEY.C >
** キーボード処理( FMC関数ライブラリ使用:link時にFMC関数ライブラリを一緒にリンクすること )
** キーアドレス等は、"KEY.H" を使用のこと.
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
int KEY_test( char *matrix,char keyadrs ) ;
void KEY_make( char keyadrs ) ;
void KEY_break( char keyadrs ) ;
int KEY_hitchk( void ) ;
int KEY_matrix_check( char *matrix ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < WAIT.C >
** 時間待ち
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
void wait( int sec ) ;
/*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
** < PAL.C >
** パレットデータの取得/設定
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/
void vsyncwait( void ) ;
void getpal( int palno,unsigned char *blue,unsigned char *red,unsigned char *green ) ;
void setpal( int palno,unsigned char blue,unsigned char red,unsigned char green,int sw ) ;